using UnityEngine;
using UnityEditor;

public static class CustomGUILayout
{
    // 用于存储垂直布局开始时的矩形信息
    private static Rect _verticalStartRect;
    // 用于存储背景样式（使用静态只读字段提高性能）
    private static readonly GUIStyle _blackBackgroundStyle;
    // 静态纹理实例（确保全局唯一）
    private static Texture2D _backgroundTexture;

    // 静态构造函数，确保只初始化一次
    static CustomGUILayout()
    {
        _blackBackgroundStyle = new GUIStyle();
        // 延迟创建纹理，直到第一次使用时才初始化
    }

    /// <summary>
    /// 开始一个带黑色背景的垂直布局
    /// </summary>
    public static void BeginVerticalBlack()
    {
        // 确保样式和纹理已初始化（延迟初始化，只在首次使用时创建）
        EnsureStyleInitialized();
        
        // 记录开始位置
        _verticalStartRect = GUILayoutUtility.GetRect(0, 0, GUILayout.ExpandWidth(true));
        
        // 开始垂直布局并应用样式
        EditorGUILayout.BeginVertical(_blackBackgroundStyle);
    }
    
    /// <summary>
    /// 结束带黑色背景的垂直布局
    /// </summary>
    public static void EndVerticalBlack()
    {
        // 结束官方的垂直布局
        EditorGUILayout.EndVertical();
    }
    
    /// <summary>
    /// 确保样式和纹理已初始化（延迟初始化模式）
    /// </summary>
    private static void EnsureStyleInitialized()
    {
        if (_backgroundTexture == null)
        {
            // 创建1x1像素纹理（足够用于平铺，比2x2更高效）
            _backgroundTexture = MakeTex(1, 1, new Color(0.1f, 0.1f, 0.1f, 1f));
            _blackBackgroundStyle.normal.background = _backgroundTexture;
        }
    }

        /// <summary>
        /// 辅助方法：创建纯色纹理（优化版本）
        /// </summary>
        // 辅助方法：创建纯色纹理
        private static Texture2D MakeTex(int width, int height, Color col)
        {
            Color[] pix = new Color[width * height];
            for (int i = 0; i < pix.Length; i++)
            {
                pix[i] = col;
            }
            Texture2D result = new Texture2D(width, height);
            result.SetPixels(pix);
            result.Apply();
            return result;
        }
    
}

